<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="google-site-verification" content="xBT4GhYoi5qRD5tr338pgPM5OWHHIDR6mNg1a3euekI" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Tom的博客">
    <meta name="keyword"  content="">
    <link rel="shortcut icon" href="/img/favicon.ico">

    <title>
        
        I2C协议标准简介 - Tom的博客
        
    </title>

    <!-- Custom CSS -->
    
<link rel="stylesheet" href="/css/aircloud.css">

    
<link rel="stylesheet" href="/css/gitment.css">

    <!--<link rel="stylesheet" href="https://imsun.github.io/gitment/style/default.css">-->
    <link href="//at.alicdn.com/t/font_620856_pl6z7sid89qkt9.css" rel="stylesheet" type="text/css">
    <!-- ga & ba script hoook -->
    <script></script>
<meta name="generator" content="Hexo 5.4.0"></head>

<body>

<div class="site-nav-toggle" id="site-nav-toggle">
    <button>
        <span class="btn-bar"></span>
        <span class="btn-bar"></span>
        <span class="btn-bar"></span>
    </button>
</div>

<div class="index-about">
    <i> 间歇性壮志凌云, 持续性混吃等死 </i>
</div>

<div class="index-container">
    
    <div class="index-left">
        
<div class="nav" id="nav">
    <div class="avatar-name">
        <div class="avatar ">
            <img src="/img/avatar.jpg" />
        </div>
        <div class="name">
            <i>Tom</i>
        </div>
    </div>
    <div class="contents" id="nav-content">
        <ul>
            <li >
                <a href="/">
                    <i class="iconfont icon-shouye1"></i>
                    <span>主页</span>
                </a>
            </li>
            <li >
                <a href="/tags">
                    <i class="iconfont icon-biaoqian1"></i>
                    <span>标签</span>
                </a>
            </li>
            <li >
                <a href="/archives">
                    <i class="iconfont icon-guidang2"></i>
                    <span>存档</span>
                </a>
            </li>
            <li >
                <a href="/about/">
                    <i class="iconfont icon-guanyu2"></i>
                    <span>关于</span>
                </a>
            </li>
            
            <li>
                <a id="search">
                    <i class="iconfont icon-sousuo1"></i>
                    <span>搜索</span>
                </a>
            </li>
            
        </ul>
    </div>
    
        <div id="toc" class="toc-article">
    <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#I2C%E6%80%BB%E7%BA%BF%E6%A6%82%E5%BF%B5"><span class="toc-text">I2C总线概念</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93"><span class="toc-text">数据传输</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%B5%B7%E5%A7%8B%E6%9D%A1%E4%BB%B6%E5%92%8C%E5%81%9C%E6%AD%A2%E6%9D%A1%E4%BB%B6"><span class="toc-text">起始条件和停止条件</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E6%9C%89%E6%95%88%E6%80%A7"><span class="toc-text">数据有效性</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AD%97%E8%8A%82%E6%A0%BC%E5%BC%8F"><span class="toc-text">字节格式</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%93%8D%E5%BA%94"><span class="toc-text">响应</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E4%BB%B2%E8%A3%81%E5%92%8C%E6%97%B6%E9%92%9F%E5%90%8C%E6%AD%A5"><span class="toc-text">仲裁和时钟同步</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%97%B6%E9%92%9F%E5%90%8C%E6%AD%A5"><span class="toc-text">时钟同步</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%BB%B2%E8%A3%81"><span class="toc-text">仲裁</span></a></li></ol></li></ol>
</div>
    
</div>


<div class="search-field" id="search-field">
    <div class="search-container">
        <div class="search-input">
            <span id="esc-search"> <i class="icon-fanhui iconfont"></i></span>
            <input id="search-input"/>
            <span id="begin-search">搜索</span>
        </div>
        <div class="search-result-container" id="search-result-container">

        </div>
    </div>
</div>

        <div class="index-about-mobile">
            <i> 间歇性壮志凌云, 持续性混吃等死 </i>
        </div>
    </div>
    
    <div class="index-middle">
        <!-- Main Content -->
        


<div class="post-container">
    <div class="post-title">
        I2C协议标准简介
    </div>

    <div class="post-meta">
        <span class="attr">发布于：<span>2019-08-06 19:49:57</span></span>
        
        <span class="attr">标签：/
        
        <a class="tag" href="/tags/#电子" title="电子">电子</a>
        <span>/</span>
        
        
        </span>
        <span class="attr">访问：<span id="busuanzi_value_page_pv"></span>
</span>
</span>
    </div>
    <div class="post-content no-indent">
        <h3 id="I2C总线概念"><a href="#I2C总线概念" class="headerlink" title="I2C总线概念"></a>I2C总线概念</h3><p>I2C总线是由一根SCL和一根SDA组成,每根总线都接到一个上拉电阻,所以总线空闲状态下都为高电平.所有的器件都并联在总线上,所以只要当其中一个器件输出低电平,总线就会表现为低电平.</p>
<p>同一个总线上,允许存在一个或多个主机,总线通常由主机控制,当有两个以上主机同时尝试控制总线,就会执行仲裁,赢得仲裁的主机,将获得总线的控制权.</p>
<p><img src="../img/2019_08_06_19_51_24.png" alt=""></p>
<div class="table-container">
<table>
<thead>
<tr>
<th>术语</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>发送器</td>
<td>发送数据到总线的器件</td>
</tr>
<tr>
<td>接收器</td>
<td>从总线接收数据的器件</td>
</tr>
<tr>
<td>主机</td>
<td>初始化发送 产生时钟信号和终止发送的器件</td>
</tr>
<tr>
<td>从机</td>
<td>被主机寻址的器件</td>
</tr>
<tr>
<td>多主机</td>
<td>同时有多于一个主机尝试控制总线 但不破坏报文</td>
</tr>
<tr>
<td>仲裁</td>
<td>是一个在有多个主机同时尝试控制总线 但只允许其中一个控制总线并使报文不被破坏 的过程</td>
</tr>
<tr>
<td>同步</td>
<td>两个或多个器件同步时钟信号的过程</td>
</tr>
</tbody>
</table>
</div>
<blockquote>
<p>注意: 发送器不等于主机,接收器也不等于从机.发送器和接收器仅由数据传送的方向决定</p>
</blockquote>
<h3 id="数据传输"><a href="#数据传输" class="headerlink" title="数据传输"></a>数据传输</h3><h4 id="起始条件和停止条件"><a href="#起始条件和停止条件" class="headerlink" title="起始条件和停止条件"></a>起始条件和停止条件</h4><p>起始条件: 当SCL线高电平时, SDA线由高电平向低电平切换,开始数据传输.<br>停止条件: 当SCL线低电平时,SDA线由低电平向高电平切换,停止数据传输.</p>
<p><img src="../img/2019_08_06_19_52_02.png" alt=""></p>
<h4 id="数据有效性"><a href="#数据有效性" class="headerlink" title="数据有效性"></a>数据有效性</h4><p>SDA线上的数据必须在时钟的高电平周期保持稳定,在SCL的低电平周期,才允许发生改变.</p>
<p><img src="../img/2019_08_06_19_52_18.png" alt=""></p>
<h4 id="字节格式"><a href="#字节格式" class="headerlink" title="字节格式"></a>字节格式</h4><p>发送到SDA上的每个字节必须是8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个响应位,首先传输的是数据的高位.</p>
<h4 id="响应"><a href="#响应" class="headerlink" title="响应"></a>响应</h4><p>数据传输必须带响应,相关的响应时钟脉冲由主机产生,在响应的时钟脉冲期间,发送器释放 SDA 线.在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平.</p>
<p>在数据传输过程中,如果从机要完成一些功能后(比如执行一个内部中断程序),才能发送或接收下一个字节,可以主动将SCL线拉低,迫使主机进入等待状态,当从机准备好之后,即可释放SCL线,数据传输继续.</p>
<p><img src="../img/2019_08_06_19_52_48.png" alt=""></p>
<h3 id="仲裁和时钟同步"><a href="#仲裁和时钟同步" class="headerlink" title="仲裁和时钟同步"></a>仲裁和时钟同步</h3><p>主机只能在总线空闲的时侯启动传输,两个或多个主机可能在起始条件的小持续时间 tHD;STA内产生一个起始条件.这样,多个主机就要执行仲裁,赢得仲裁的主机,将获得总线的控制权.</p>
<p>多个主机的时钟频率可能会不同,这种情况下是没有办法执行仲裁的,所以在仲裁的同时需要进行时钟同步.</p>
<h4 id="时钟同步"><a href="#时钟同步" class="headerlink" title="时钟同步"></a>时钟同步</h4><p>所有主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文 数据只在时钟的高电平周期有效.因此,需要一个确定的时钟进行逐位仲裁.</p>
<p>时钟同步通过线与连接 I2C 接口到 SCL 线来执行,这就是说 SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使 SCL 线保持这种状态直到到达时钟的高电平.但是如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变 SCL 线的状态,因此 SCL 线被有长低电平周期的器件保持低电平,此时低电平周期短的器件会进入高电平的等待状态.</p>
<p>当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平,之后器件时钟和 SCL 线的状态没有差别,而且所有器件会开始数它们的高电平周期,首先完成高电平周期的器件会再次将 SCL 线拉低.</p>
<p>这样,产生的同步 SCL 时钟的低电平周期由低电平时钟周期长的器件决定,而高电平周期由高电平时钟周期短的器件决定.</p>
<p><img src="../img/2019_08_06_19_53_07.png" alt=""></p>
<h4 id="仲裁"><a href="#仲裁" class="headerlink" title="仲裁"></a>仲裁</h4><p>时钟同步后,当SCL位高电平时,仲裁在SDA线发生.当其他主机向SDA发送低电平时,发送高电平的主机将丢失仲裁,因为它发现总线上的电平与自己的电平不同.</p>
<p><img src="../img/2019_08_06_19_53_23.png" alt=""></p>
<p>如图所示,两个主机DATA1和DATA2同时尝试控制总线,在第一和第二个时钟周期,两个主机向SDA发送了相同的位数据,但是在第三个时钟周期,DATA1发送了高电平,DATA2发送了低电平.但是因为此时总线上表现出来的为低电平,所以发送高电平的主机DATA1丢失了仲裁.从图上可以看到,这种仲裁方式并不会破坏数据.</p>
<blockquote>
<p>更多详细信息请查看I2C协议标准官方文档</p>
</blockquote>

        
            <div class="donate-container">
    <div class="donate-button">
        <button id="donate-button">赞赏</button>
    </div>
    <div class="donate-img-container hide" id="donate-img-container">
        <img id="donate-img" src="" data-src="/img/donate.jpg">
        <p> 感谢鼓励 </p>
    </div>
</div>
        
        <br />
        <div id="comment-container">
        </div>
        <div id="disqus_thread"></div>

        <div id="lv-container">
        </div>

    </div>
</div>

    </div>
</div>


<footer class="footer">
    <ul class="list-inline text-center">
        
        

        

        

        

        

    </ul>
    
    <p>
        <span id="busuanzi_container_site_pv">
            <span id="busuanzi_value_site_pv"></span>PV
        </span>
        <span id="busuanzi_container_site_uv">
            <span id="busuanzi_value_site_uv"></span>UV
        </span>
        Created By <a target="_blank" rel="noopener" href="https://hexo.io/">Hexo</a>  Theme <a target="_blank" rel="noopener" href="https://github.com/aircloud/hexo-theme-aircloud">AirCloud</a></p>
</footer>




<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</body>

<script>
    // We expose some of the variables needed by the front end
    window.hexo_search_path = "search.json"
    window.hexo_root = "/"
    window.isPost = true
</script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

<script src="/js/index.js"></script>

<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>




</html>
